#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
#include"List.h"
using namespace std;

int main()
{
	LF::list<int> lt1;
	lt1.push_back(1);
	lt1.push_back(2);
	lt1.push_back(3);
	lt1.push_back(4);
	//1 2 3 4
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.push_front(1);
	lt1.push_front(2);
	lt1.push_front(3);
	//3 2 1 1 2 3 4 
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.pop_back();
	lt1.pop_back();
	//3 2 1 1 2
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;

	lt1.pop_front();
	lt1.pop_front();
	lt1.pop_front();
	//1 2
	for (auto e : lt1)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

//int main()
//{
//	const LF::list<int> lt1(10, 1);
//	LF::list<int>::const_iterator it1 = lt1.begin();
//	while (it1 != lt1.end())
//	{
//		cout << *it1 << " ";
//		it1++;
//	}
//	cout << endl;
//}


//int main()
//{
//	LF::list<int> lt1;
//	lt1.push_back(1);
//	lt1.push_back(2);
//	lt1.push_back(3);
//	lt1.push_back(4);
//
//	LF::list<int>::iterator it1 = lt1.begin();
//	while (it1 != lt1.end())
//	{
//		//*it1 = 2;
//		cout << *it1 << " ";
//		++it1;
//	}
//	cout << endl;
//
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	return 0;
//}

//int main()
//{
//	list<int> lt1 = { 15,2,31,14,15 };
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	lt1.sort();
//
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	
//	sort(lt1.begin(),lt1.end(),greater<int>());
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//	return 0;
//}

//LRU
//int main()
//{
//	list<int> lt1 = { 1,2,3,4,5 };
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	int x;
//	while (cin >> x)
//	{
//		auto pos = find(lt1.begin(), lt1.end(), x);
//		if (pos != lt1.end())
//		{
//			lt1.splice(lt1.begin(), lt1, pos);
//		}
//		for (auto e : lt1)
//		{
//			cout << e << " ";
//		}
//		cout << endl;
//	}
//	return 0;
//}

//int main()
//{
//	list<int> lt1 = { 1,2,3,4,5 };
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	int x;
//	cin >> x;
//	auto it = find(lt1.begin(), lt1.end(), x);
//	if (it != lt1.end())
//	{
//		lt1.erase(it);
//	}
//
//	for (auto e : lt1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//	return 0;
//}

//class Pos
//{
//public:
//	Pos(int row,int col)
//		:_row(row)
//		,_col(col)
//	{}
//private:
//	int _row;
//	int _col;
//};
//
//int main()
//{
//	list<Pos> lt;
//	Pos p1(1, 1);
//	lt.push_back(p1);
//	lt.push_back(Pos(2, 2));
//	lt.push_back({3,3});
//
//	lt.emplace_back(p1);
//	lt.emplace_back(Pos(2, 2));
//	//lt.emplace_back({ 3,3 });
//	lt.emplace_back(3, 3);
//	return 0;
//}

//int main()
//{
//	list<int> lt1;
//	lt1.push_back(1);
//	lt1.push_back(2);
//	lt1.push_back(3);
//	lt1.push_back(4);
//
//	list<int>lt2 = { 1,2,3,4,5 };
//	list<int>::iterator it1 = lt1.begin();
//
//	while (it1 != lt1.end())
//	{
//		cout << *it1 << " ";
//		++it1;
//	}
//	cout << endl;
//
//	for (auto& e : lt2)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	return 0;
//}